﻿//汉诺塔问题
#include <iostream>

using namespace std;

int n;
char a, b, c;

void dfs(int n, char x, char z, char y)
{
	if (n == 0) return;
	//将n-1个盘子从x借助y转移到z
	dfs(n - 1, x, y, z);
	//将最下面的盘子通过直接从x放到y,即'一'的操作
	printf("%c->%d->%c", x, n ,y);
	//再将n-1个盘子从z借助x转移到b
	dfs(n - 1, z, x, y);
}

int main()
{
	cin >> n >> a >> b >> c;
	dfs(n, a, c, b); //将a个盘子借助c转移到b
	return 0;
}


//占⼘DIY

//#include <iostream>
//
//using namespace std;
//
//const int N = 15;
//
//int n = 13, m = 4;
//
//int a[14][5];
//int cnt[N];
//
//void dfs(int x)
//{
//	if (x == 13) return;
//
//	int t = a[x][cnt[x]];
//	cnt[x]--;
//	dfs(t);
//}
//
//int main()
//{
//	for (int i = 1; i <= n; i++)
//	{
//		cnt[i] = 4;
//		for (int j = 1; j <= n; j++)
//		{
//			char ch; cin >> ch;
//			if (ch >= '2' && ch <= '9') a[i][j] = ch - '0';
//			else if (ch == 'A') a[i][j] = 1;
//			else if (ch == 'J') a[i][j] = 11;
//			else if (ch == 'Q') a[i][j] = 12;
//			else if (ch == 'K') a[i][j] = 13;
//			else a[i][j] = 10;
//		}
//	}
//
//	for (int i = 1; i <= m; i++)
//	{
//		dfs(a[n][i]);
//	}
//
//	int ret = 0;
//	for (int i = 1; i <= n; i++)
//	{
//		if (cnt[i] == 0) ret++;
//	}
//
//	cout << ret << endl;
//
//	return 0;
//}


//#include <iostream>
//using namespace std;
//const int N = 15;
//int n = 13, m = 4;
//int a[14][5];
//int cnt[N];
//void dfs(int x)
//{
//	if (x == 13) return;
//	int t = a[x][cnt[x]];
//	cnt[x]--;
//	dfs(t);
//}
//int main()
//{
//	for (int i = 1; i <= n; i++)
//	{
//		cnt[i] = 4;
//		for (int j = 1; j <= m; j++)
//		{
//			char ch; cin >> ch;
//			if (ch >= '2' && ch <= '9') a[i][j] = ch - '0';
//			else if (ch == 'A') a[i][j] = 1;
//			else if (ch == 'J') a[i][j] = 11;
//			else if (ch == 'Q') a[i][j] = 12;
//			else if (ch == 'K') a[i][j] = 13;
//			else a[i][j] = 10;
//		}
//	}
//	for (int i = 1; i <= m; i++)
//	{
//		dfs(a[n][i]);
//	}
//	int ret = 0;
//	for (int i = 1; i <= n; i++)
//	{
//		if (cnt[i] == 0) ret++;
//	}
//	cout << ret << endl;
//	return 0;
//}